package org.yohann.ai.service;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;

import java.util.Map;

@Service
public class RecommendService {

    private final ChatClient jsonChat;
    private final ChatClient htmlChat;

    public RecommendService(@Qualifier("jsonChat") ChatClient jsonChat, @Qualifier("htmlChat") ChatClient htmlChat) {
        this.jsonChat = jsonChat;
        this.htmlChat = htmlChat;
    }

    public String getViewSuggestion(String userId) {
        PromptTemplate promptTemplate = new PromptTemplate("""
                请获取全部页面列表和用户浏览记录
                再根据获取到的用户浏览记录，在全部页面列表中推荐的三个用户最可能的页面
                用户ID: {userId}
                返回浏览记录和推荐页面整个json item
                包含字段viewLog/recommend
                """);

        return jsonChat.prompt(
                        promptTemplate.create(Map.of(
                                "userId", userId
                        )))
                .call()
                .content();
    }

    public Flux<String> getSalesSuggestion(String userId) {
        String promptTemplate = String.format("""
                用户ID: %s
                请获取用户账单和全部服务信息
                再根据获取到的数据，分析应该推销的服务，并说明原因
                内容精简一点，生成html表格
                严格按照以下格式：
                <table>
                    <thead>
                        <tr>
                            <th>推荐服务</th>
                            <th>类型</th>
                            <th>价格</th>
                            <th>原因</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>300M家庭宽带</td>
                            <td>宽带</td>
                            <td>199.00元/月</td>
                            <td>比当前100M宽带更高速，性价比更高</td>
                        </tr>
                    </tbody>
                </table>
                """, userId);

        return htmlChat.prompt(promptTemplate)
                .stream()
                .content();
    }
}